package com.example.chamberlainserver.Entry;

import lombok.Data;
import lombok.NoArgsConstructor;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.time.LocalDateTime;

@Data
@NoArgsConstructor
public class ScheduleRule {
    private String id;                    // 主键ID
    private String name;                  // 规则名称
    private String description;           // 规则描述
    private Integer minStaffPerSlot;      // 每个时间段最少人数
    private Integer maxStaffPerSlot;      // 每个时间段最多人数
    private Integer maxHoursPerWeek;      // 每人每周最大工作小时数
    private Integer minRestHours;         // 最小休息时间（小时）
    
    // 优先级权重配置
    private PriorityWeights priorityWeights;
    
    // 约束条件配置
    private Constraints constraints;
    
    private Boolean isActive;             // 是否启用
    private Integer priority;             // 优先级
    private Integer createdBy;            // 创建人ID
    private LocalDateTime createdAt;      // 创建时间
    private LocalDateTime updatedAt;      // 更新时间
    
    // 非数据库字段，用于关联创建人信息
    private transient User creator;
    
    @Data
    @NoArgsConstructor
    public static class PriorityWeights {
        private Integer availability;      // 可用性权重
        private Integer preference;        // 偏好权重
        private Integer fairness;          // 公平性权重
        private Integer experience;        // 经验权重
    }
    
    @Data
    @NoArgsConstructor
    public static class Constraints {
        private Boolean noConsecutiveNights;        // 不连续夜班
        private Boolean weekendRotation;            // 周末轮换
        private Integer maxConsecutiveDays;         // 最大连续工作天数
        private Boolean oneShiftPerPerson;         // 指定人员只排一班
        private Integer maxShiftsPerWeek;           // 每人每周最大班次数量
        private Boolean respectLunchAvailability;   // 中午时间段是否按用户空闲时间排班
        private Boolean respectWeekendAvailability; // 周末时间段是否按用户空闲时间排班
    }
}